
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>promise方法</title>
</head>
<body>

    Promise-then
    <!-- 
       .then用来接受promise对象返回的成功或者失败的结果，默认也是返回promise对象
            对于返回的返回promise对象有以下几种情况：
                1.如果没有返回值则返回的promise对象是成功状态,值是undefined
                2.如果返回了非promise对象的值，则返回的promise对象是成功状态,值是本次返回的结果
        ​        3.抛出异常 返回失败状态结果 值为抛出的异常信息
        ​        4.如果返回的是promise对象，结果就是promise对象返回的状态
     -->
    <!-- 
       获取promise对象返回的错误结果，和.then方法中第二个回调函数结果一直，所以.catch是语法糖
     -->

    <script>
            // 1.定义promise对象
            let p = new Promise((resolve, reject) => {
                // 定时器是异步代码
                setTimeout(() => {
                    // 时间到达需要调用resolve或者是reject修改promsie状态
                    if (true) {
                        resolve([{ id: 11, name: "李四" }])
                    } else {
                            reject('失败')
                    }
                }, 2000)
            })

            // 2.通过.then获取promise内部的处理结果（成功|失败）

            // p.then((res)=>{
            //     console.log("成功的回调函数"+res);
            // },(err)=>{
            //     console.log("失败的回调函数"+err);
            // })
            p.then((res)=>{
                console.log("成功的回调函数"+res);
            }).catch((err)=>{
                console.log("失败的回调函数"+err);
            })


            //3.测试关于.then返回值的问题 

           let p2 = p.then(res=>{
                // 1.如果没有返回值则返回的promise对象是成功状态, 值是undefined
                // 2.如果返回了非promise对象的值，则返回的promise对象是成功状态, 值是本次返回的结果
                // return 123
                // 3.抛出异常 返回失败状态结果(reject) 值为抛出的异常信息
                throw new Error('再次失败了') 
                // 4.如果返回的是promise对象，结果就是promise对象返回的状态
            })

            console.log(p2);
            

    </script>
    
</body>
</html>